Requirements engineering (RE) is a systems and software engineering process which covers all of the activities involved in discovering, documenting and maintaining a set of requirements for a computer-based system.[1] While there are differing definitions of the term, common factors are that requirements engineering is a subdiscipline of systems and software engineering and is concerned with establishing the goals, functions and constraints of hardware and software systems.[2][3]
The first use of the term 'requirements engineering was probably in 1979 in a TRW technical report [4] but did not come into general use until the 1990s with the publication of an IEEE Computer Society tutorial [5] and the establishment of a conference series on requirements engineering.
In the traditional waterfall model of the systems or software engineering process,[6] requirements engineering is presented as the first stage of the development process, with the outcome being a requirements document or Software requirements specification. In fact, requirements engineering is a process that continues through the lifetime of a system as the requirements are subject to change and new requirements must be elicited and documented and existing requirements managed over the lifetime of the system.
Alan M. Davis maintains an extensive bibliography of requirements engineering.[7]
The sub-processes that are part of a general requirements engineering process vary widely, depending on the type of system being developed and the specific practice of the organization developing the requirements.[8] Activities within the RE process may include:
These are sometimes presented as chronological stages although, in practice, there is considerable interleaving of these activities.